package com.jc.order.controller;


import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import com.jc.order.dto.EciCustomerQuotaApprovedDTO;
import com.jc.order.service.EciCustomerQuotaApprovedService;
import com.jc.util.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("quotaApproved/v1")
@Slf4j
public class EciQuotaApprovedController {


    @Autowired
    private EciCustomerQuotaApprovedService eciCustomerQuotaApprovedService;

    @RequestMapping("apply")
    public Result  importApproval(@RequestParam("path") String path) {
        Result result = new Result<>();
        result.ok();//初始
        ExcelReader reader = ExcelUtil.getReader(path);
        List<Map<String, Object>> readAll = reader.readAll();
        reader.close();
        if (readAll != null && readAll.size() > 0) {
            List<EciCustomerQuotaApprovedDTO> importList = new ArrayList<>();
            for (int i = 0; i < readAll.size(); i++) {
                EciCustomerQuotaApprovedDTO dto = new EciCustomerQuotaApprovedDTO();
                Map<String, Object> map = readAll.get(i);
                // 6. 映射Excel列到DTO字段
                dto.setQuotaNo(getString(map.get("限额编号")));
                dto.setCorpBuyerNo(getString(map.get("买方/供应商PICCCODE")));
                dto.setRiskCompName(getString(map.get("买方/供应商名称")));
                dto.setRiskCompAddress(getString(map.get("买方/供应商地址")));
                dto.setBankEngName(getString(map.get("开证行名称")));
                dto.setBankSwift(getString(map.get("SWIFT代码")));
                dto.setPolicyNo(getString(map.get("保单号")));
                dto.setPayMode(getString(map.get("批复支付方式")));
                dto.setAuditDate(getString(map.get("批复日期")));
                dto.setEffectDate(getString(map.get("限额生效日")));
                dto.setLapseDate(getString(map.get("限额失效日")));
                dto.setAdCondition(getString(map.get("特别条件")));
                dto.setBillNote(getString(map.get("限额审批说明")));

                // 数值类型转换
                dto.setQuotaSum(parseBigDecimal(map.get("批复额度")));
                dto.setPayTerm(parseInteger(map.get("批复信用期限（天）")));
                dto.setRefuseRate(parseBigDecimal(map.get("拒收赔偿比例(%)")));
                dto.setOtherRate(parseBigDecimal(map.get("其他商业风险赔偿比例(%)")));
                dto.setLcRate(parseBigDecimal(map.get("信用证商业风险赔偿比例(%)")));
                dto.setPoliRate(parseBigDecimal(map.get("政治风险赔偿比例(%)")));

                // 逻辑字段计算
                dto.setIfLc("LC".equalsIgnoreCase(dto.getPayMode()) ? 1 : 0);

                // 7. 设置系统字段
                dto.setCreateTime(new Date());
                dto.setUpdateTime(new Date());
                dto.setCreateUser("SYSTEM_IMPORT");
                dto.setUpdateUser("SYSTEM_IMPORT");
                dto.setApproveFlag(1); // 审批通过
                dto.setTenantId(1L); // 租户ID
                dto.setQuotaState("ACTIVE"); // 限额状态
                dto.setDataSource("1");
                // 8. 添加到导入列表
                importList.add(dto);
            }

            if (importList!=null && importList.size()>0){
                // 业务处理
               Boolean b=  eciCustomerQuotaApprovedService.importApproval(importList);
               if (!b){
                   result.error();
               }
            }
        }
        return result;
    }




    // 辅助方法：安全获取字符串值
    private static String getString(Object value) {
        return value != null ? value.toString().trim() : null;
    }

    // 辅助方法：转换为Long
    private static Long parseLong(Object value) {
        if (value == null) return null;
        try {
            if (value instanceof Number) {
                return ((Number) value).longValue();
            }
            return Long.parseLong(value.toString().trim());
        } catch (NumberFormatException e) {
            System.err.println("Long转换错误: " + value);
            return null;
        }
    }

    // 辅助方法：转换为Integer
    private static Integer parseInteger(Object value) {
        if (value == null) return null;

        try {

            String strValue = value.toString().trim();

            // 处理空字符串
            if (strValue.isEmpty()) {
                return null;
            }


            if (value instanceof Number) {
                return ((Number) value).intValue();
            }
            return Integer.parseInt(value.toString().trim());
        } catch (NumberFormatException e) {
            System.err.println("Integer转换错误: " + value);
            return null;
        }
    }

    // 辅助方法：转换为BigDecimal
    private static BigDecimal parseBigDecimal(Object value) {
        if (value == null ) {
            return null;
        }

        try {

            String strValue = value.toString().trim();

            // 处理空字符串
            if (strValue.isEmpty()) {
                return null;
            }
            if (value instanceof Number) {
                return BigDecimal.valueOf(((Number) value).doubleValue());
            }
            return new BigDecimal(value.toString().trim());
        } catch (NumberFormatException e) {
            System.err.println("BigDecimal转换错误: " + value);
            return null;
        }
    }

}
